from fastapi import APIRouter, Depends, Security
from fastapi.responses import JSONResponse

from myProfile.models.data.myProfile_models import Login, PsychoTherapy
from myProfile.repository.psycho_therapy import PsychoTherapyRepository
from myProfile.models.request.myProfile_request import PsychoTherapyReq
from myProfile.db_config.odmantic_config import create_db_engine
from myProfile.security.secure import get_current_valid_user

router = APIRouter()


@router.post("/therapy/add")
async def add_therapy(req: PsychoTherapyReq,
                      current_user: Login = Security(
                          get_current_valid_user, scopes=["user"]),
                      engine=Depends(create_db_engine)):
    therapy = PsychoTherapy(**req.model_dump())
    repo: PsychoTherapyRepository = PsychoTherapyRepository(engine)
    result = await repo.add_to_profile(current_user.id, therapy)
    if result is True:
        return req
    else:
        return JSONResponse(
            content={"message": "add therapy problem encountered."},
            status_code=500)


@router.delete("/therapy/delete/{id}")
async def delete_therapy(id: int,
                         current_user: Login = Security(
                             get_current_valid_user, scopes=["user"]),
                         engine=Depends(create_db_engine)):
    repo: PsychoTherapyRepository = PsychoTherapyRepository(engine)
    result = await repo.remove_from_profile(current_user.id, id)
    if result is True:
        return JSONResponse(
            content={"message": "delete therapy successfully"},
            status_code=201)
    else:
        return JSONResponse(
            content={"message": "delete therapy unsuccessfully"},
            status_code=500)


@router.get("/therapy/get")
async def get_therapy(current_user: Login = Security(
                    get_current_valid_user, scopes=["user"]),
                  engine=Depends(create_db_engine)):
    repo: PsychoTherapyRepository = PsychoTherapyRepository(engine)
    return await repo.get_from_profile(current_user.id)
